import requests
import time
import random
import numpy as np
import matplotlib.pyplot as plt
import jieba
import wordcloud
import os
from wordcloud import ImageColorGenerator
from PIL import Image
from bs4 import BeautifulSoup


class Reptile:
    @staticmethod
    def get(path):
        urls = ['https://movie.douban.com/subject/34841067/comments?start={}&limit=20&status=P&sort=new_score'.format(
            str(i))
            for i in range(0, 200, 20)]  # 通过观察的url翻页的规律，使用for循环得到10个链接，保存到urls列表中
        dic_h = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/87.0.4280.88 Safari/537.36"}
        comments_list = []  # 初始化用于保存短评的列表
        for url in urls:  # 使用for循环分别获取每个页面的数据，保存到comments_list列表
            r = requests.get(url=url, headers=dic_h).text
            soup = BeautifulSoup(r, 'lxml')
            ul = soup.find('div', id="comments")
            lis = ul.find_all('p')
            list2 = []
            for li in lis:
                list2.append(li.find('span').string)
            comments_list.extend(list2)
            time.sleep(random.randint(0, 3))  # 暂停0~3秒
        with open(path, 'w', encoding='utf-8') as f:  # 使用with open()新建对象f
            # 将列表中的数据循环写入到文本文件中
            for i in comments_list:
                f.write(i + "\n")  # 写入数据


class Cloud:
    @staticmethod
    def draw(text_path=r'text.txt', pic_path=r'background.png', save_path=r'word_cloud.png'):
        """画出词云图并且显示出来，根绝text_path(str)和pic_path(str)来读取文档和背景图片,默认为"""
        try:
            text = open(f'{text_path}', 'r').read()
            cut_text = jieba.cut(text)  # 分词处理
            word = ' '.join(cut_text)  # 以空格分割文本
            # 读取图片
            pic = np.array(Image.open(f'{pic_path}'))
            image_colors = ImageColorGenerator(pic)  # 生成图片颜色中的颜色
            stop_words = ['的', '是', '了', '也', '我', '你', '在', '就', '都']
            wd = wordcloud.WordCloud(
                mask=pic,  # 背景图形,如果根据图片绘制，则需要设置
                font_path='simhei.ttf',  # 可以改成自己喜欢的字体
                background_color='white',  # 词云图背景颜色可以换成自己喜欢的颜色
                stopwords=stop_words
            )
            wd.generate(word)  # 生成词云
            # 图片颜色渲染词云图的颜色，用color_func指定
            plt.imshow(wd.recolor(color_func=image_colors), interpolation='bilinear')
            plt.axis('off')  # 关闭显示x轴、y轴下标
            plt.figure()
            plt.imshow(pic, cmap=plt.cm.gray, interpolation='bilinear')
            plt.axis('off')  # 关闭显示x轴、y轴下标
            plt.savefig(f'{save_path}')
            wd.to_file(f'{save_path}')
        except FileNotFoundError:
            print("未能成功打开文件，可能是文件路径错误")
        except:
            print("未知错误")


class WorkPath:
    work_dir = work_dir = os.path.abspath('.')
